/**
 * 
 */
package com.nari.baseinfo.dao;

import java.util.List;
import java.util.Map;

import com.nari.baseinfo.model.IBuilding;
import com.nari.coreframe.dao.hibernate3.IGenericDao;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-1
 */
public interface IBuildingDao extends IGenericDao<IBuilding, String> {
	
	/**
	 * 分页查询楼栋信息
	 * @param buildingName 楼栋名称(可选)
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-8
	 */
	public ResultWithPageCond<IBuilding> queryBuildingPage(String buildingName, String projectUID, 
			String communityUID, PageCond pageCond) throws Exception;
	
	/**
	 * 根据楼栋所属信息（所属项目、所属小区）查询楼栋列表
	 * 若项目ID、小区ID都不存在，则返回空列表
	 * @param projectUID 所属项目
	 * @param communityUID 所属小区
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-12
	 */
	public List<IBuilding> queryBuildingByBelongings(String projectUID, 
			String communityUID) throws Exception;
	
	/**
	 * 通过楼栋ID列表查询楼栋信息
	 * @param idList 楼栋ID列表，若列表为空，则返回空列表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-13
	 */
	public List<IBuilding> queryBuildingByIDList(List<String> idList) throws Exception;
	
	/**
	 * 通过楼栋ID列表查询楼栋ID-楼栋名称映射表
	 * @param idList 楼栋ID列表，若列表为空，则返回一个空映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-13
	 */
	public Map<String, String> queryIdNameMapByIDList(List<String> idList) throws Exception;
	
	/**
	 * 通过楼栋所属关系统计楼栋的个数
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-21
	 */
	public int countBuildingSumByBelongs(String projectUID, String communityUID) throws Exception;
	
	/**
	 * 通过楼栋编号查询楼栋信息
	 * @param buildingID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-12
	 */
	public IBuilding queryBuildingInfoByBuildingID(String buildingID) throws Exception;
	
	/**
	 * 根据楼栋ID级联删除关联信息
	 * 包括：楼栋、单元、热用户、系统用户及角色、热量表、分配表、散热器、温度点、用户分摊账单
	 * 注意：热量表数据、分配表数据等表计数据具有不可恢复性，因此不能作为级联删除的对象
	 * @param buildingUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-20
	 */
	public ResponseMsg deleteCascadeByBuildingUID(String buildingUID) throws Exception;
	
	/**
	 * 统计相同楼栋编号的楼栋数量，避免系统录入相同楼栋编号的楼栋信息
	 * @param buildingID
	 * @param buildingUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-22
	 */
	public int countByBuildingID(String buildingID, String buildingUID) throws Exception;
}
